package com.question.business.menu.controller;

import com.question.business.menu.model.ao.*;
import com.question.business.menu.model.vo.*;
import com.question.business.menu.service.IMenuService;
import com.question.common.annotation.DataConvert;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;


/**
 * 菜单接口
 *
 * @author star
 * @since 2023-09-11
 */
@RestController
@AllArgsConstructor
@RequestMapping("/menu")
public class MenuController {

    private final IMenuService service;

    /**
     * 菜单查询
     *
     * @param ao 请求参数
     * @return List<MenuVO> 响应参数
     */
    @GetMapping("/list")
    public List<MenuVO> queryMenuList(@Validated MenuAO ao) {
        return service.queryMenuList(ao);
    }

    /**
     * 菜单明细查询
     *
     * @param id 菜单ID
     * @return MenuDetailVO 响应参数
     */
    @DataConvert
    @GetMapping("/detail")
    public MenuDetailVO queryMenuDetail(@Validated @NotBlank(message = "ID不能为空") @Size(max = 20, message = "ID最大长度不能超过20") String id) {
        return service.queryMenuDetail(id);
    }

    /**
     * 菜单新增数据
     *
     * @param ao 请求参数
     * @return MenuAddVO 响应参数
     */
    @PostMapping("/add")
    public MenuAddVO addMenu(@Validated @RequestBody MenuAddAO ao) {
        return service.addMenu(ao);
    }

    /**
     * 菜单修改数据
     *
     * @param ao 数据
     */
    @PutMapping("/update")
    public void updateMenu(@Validated @RequestBody MenuUpdateAO ao) {
        service.updateMenu(ao);
    }

    /**
     * 菜单删除数据
     *
     * @param id 菜单ID
     */
    @DeleteMapping("/delete")
    public void deleteMenu(@Validated @NotBlank(message = "ID不能为空") @Size(max = 20, message = "ID最大长度不能超过20") String id) {
        service.deleteMenu(id);
    }

    /**
     * 菜单批量删除数据
     *
     * @param ids 请求参数
     */
    @DeleteMapping("/batch/delete")
    public void deleteBatchMenu(@RequestParam @Validated @NotNull(message = "删除数据不能为空") @Size(min = 1, message = "删除数据不能为空") List<@NotBlank(message = "删除数据不能为空") @Size(max = 20, message = "ID最大长度不能超过20") String> ids) {
        service.deleteBatchMenu(ids);
    }

    /**
     * 菜单启用、停用
     *
     * @param ao 请求参数
     */
    @PutMapping("/enable")
    public void enableMenu(@Validated @RequestBody MenuEnabledAO ao) {
        service.enableMenu(ao);
    }

    /**
     * 菜单下拉列表查询
     *
     * @param ao 请求参数
     * @return List<MenuDropDownVO> 响应参数
     */
    @GetMapping("/drop/down")
    public List<MenuDropDownVO> queryMenuDropDown(@Validated MenuDropDownAO ao) {
        return service.queryMenuDropDown(ao);
    }

    /**
     * 菜单栏查询
     *
     * @return List<MenuRouteVO> 响应参数
     */
    @GetMapping("/route")
    public List<MenuRouteVO> queryMenuRoute() {
        return service.queryMenuRoute();
    }

    /**
     * 菜单最新排序
     *
     * @param parentId 请求参数
     * @return Integer 响应参数
     */
    @GetMapping("/order/create")
    public Integer createMenuOrder(@Validated @NotBlank(message = "上级ID不能为空") @Size(max = 20, message = "上级ID最大长度不能超过20") String parentId) {
        return service.createMenuOrder(parentId);
    }

}
